import numpy as np

input_dog = input_dog.reshape(1,150,150,3).astype('float32')
input_dog = input_dog / 255

def get_activation(layer):
    output = model_dogs_cats.layers[layer].output  # layer output
    activation_model = models.Model(inputs=model_dogs_cats.input,
                                    outputs=output)
    activation = activation_model.predict(input_dog)
    return (activation)

def plot(activation):
    NUM_COLUMNS = 8   # number of images in a row
    num_filters = activation.shape[-1]

    # draw filter
    num_rows = num_filters//NUM_COLUMNS
    fig, axs = plt.subplots(num_rows, NUM_COLUMNS, figsize=(14,8))
    for r in range(num_rows):
        for c in range(NUM_COLUMNS):
            filter = r * NUM_COLUMNS + c                                     
            axs[r,c].imshow(activation[0,:,:,filter], 
                            cmap = plt.get_cmap('gray')) 
            axs[r,c].axis('off')
    plt.show()
    
for layer in (1,3,5):  # max_pooling layers
    activation = get_activation(layer)
    print(model_dogs_cats.layers[layer].name + "  " + 
          str(activation.shape)) #(1, height, width, num_filters)
    plot(activation)
